package com.skyline.wo.dao;

import java.util.List;

import com.skyline.base.type.Activity;
import com.skyline.common.bean.Page;
import com.skyline.wo.model.Album;

//TODO:加注释
public interface AlbumDao {
	/**
	 * 插入相册记录
	 * 
	 * @param ownerId
	 *            创建人Id
	 * @param ownerNickname
	 *            创建人nickname
	 * @param ownerPortrait
	 *            创建人头像
	 * @param albumName
	 *            相册名
	 * @param place
	 *            地点
	 * @param description
	 *            描述
	 * @param authority
	 *            权限
	 * @param activity
	 *            状态
	 * @param cover
	 *            默认相册封面
	 * @param coverExt
	 *            默认封面扩展名
	 * @return 创建的相册Id
	 */
	public long insertAlbumReturnId(long ownerId, String ownerNickname, String ownerPortrait, String albumName,
			String place, String description, int authority, Activity activity, String cover, String coverExt);

	/**
	 * 查询相册信息
	 * 
	 * @param albumId
	 *            相册Id
	 * @return 相册信息
	 */
	public Album queryAlbumById(long albumId);

	/**
	 * 查询相册详细信息
	 * 
	 * @param albumId
	 *            相册Id
	 * @return 相册信息
	 */
	public Album queryAlbumDetailById(long albumId);

	/**
	 * 查询用户相册信息（包含地点、描述，包含头像相册）
	 * 
	 * @param userId
	 *            拥有者Id
	 * @param authority
	 *            查看者相对拥有者的权限等级（查权限低于这个值的）
	 * @param page
	 *            分页用
	 * @return 相册列表
	 * 
	 */
	public List<Album> queryAlbumDetailsByUserIdWithPortrait(long userId, int authority, Page page);

	/**
	 * 增加相册相片数
	 * 
	 * @param userId
	 *            拥有者Id
	 * @param albumId
	 *            相册Id
	 * @param addedCount
	 *            需要增加的数量
	 */
	public void updatePhotoCount(long userId, long albumId, int addedCount);

	/**
	 * 增加相册浏览量
	 * 
	 * @param userId
	 *            拥有者Id
	 * @param albumId
	 *            相册Id
	 * @param addedCount
	 *            需要增加的数量
	 */
	public void updateVisitCount(long userId, long albumId, int addedCount);

	/**
	 * 修改相册信息
	 * 
	 * @param userId
	 *            用户名
	 * @param albumId
	 *            相册Id
	 * @param albumName
	 *            相册名
	 * @param place
	 *            地点
	 * @param description
	 *            描述
	 * @param authority
	 *            权限
	 * 
	 */
	public void updateAlbumInfo(long userId, long albumId, String albumName, String place, String description,
			int authority);

	/**
	 * 修改相册状态
	 * 
	 * @param userId
	 *            拥有者Id
	 * @param albumId
	 *            相册Id
	 * @param activity
	 *            状态
	 * 
	 */
	public void updateAlbumActivity(long userId, long albumId, Activity activity);

	/**
	 * 修改相册封面
	 * 
	 * @param userId
	 *            拥有者Id
	 * @param albumId
	 *            相册Id
	 * @param cover
	 *            封面
	 * @param coverExt
	 *            封面图片扩展名（格式）
	 */
	public void updateAlbumCover(long userId, long albumId, String cover, String coverExt);

	/**
	 * 从相册中选一张照片作为封面，并减少相册照片数
	 * 
	 * @param userId
	 *            拥有者Id
	 * @param albumId
	 *            相册Id
	 * @param oldPhotoId
	 *            原封面图片Id，需要排除
	 * @param defaultCover
	 *            默认相册封面
	 * @param decCount
	 *            减少数量
	 * */
	public void updateRandomCoverAndPhotoCount(long userId, long albumId, long oldPhotoId, String defaultCover,
			String defaultCoverExt, int decCount);

	/**
	 * 查询用户相册信息（不包含地点、描述，不包含头像相册）
	 * 
	 * @param userId
	 *            拥有者Id
	 * @param authority
	 *            查看者相对拥有者的权限等级（查权限低于这个值的）
	 * @param page
	 *            分页用
	 * @return 相册列表
	 * 
	 */
	public List<Album> queryAlbumsByUserIdWithoutPortrait(long userId, int authority, Page page);

	/**
	 * 查询用户所有相册的相册名（不包含头像相册）
	 * 
	 * @param userId
	 * @return 相册名列表
	 * */
	public List<Album> queryAlbumNamesOfUser(long userId);

	/**
	 * 查询某种状态的相册信息（比如头像相册就需要搜UNDELETABLE的相册）
	 * 
	 * @param userId
	 *            用户Id
	 * @param activity
	 *            当前状态
	 * @return 相册信息
	 */
	public List<Album> queryUserAlbumByActivity(long userId, Activity activity);

	// /**
	// * 查询用户相册信息，查询同时符合userId和albumId的相册
	// *
	// * @param userId
	// * 拥有者Id
	// * @param albumId
	// * 相册Id
	// * @return 相册信息
	// */
	// public Album queryUserAlbumDetailOfId(long userId, long albumId);
	//
	// /**
	// * 查询用户相册信息(不含地点、描述)，查询同时符合userId和albumId的相册
	// *
	// * @param userId
	// * 拥有者Id
	// * @param albumId
	// * 相册Id
	// * @return 相册信息
	// */
	// public Album queryUserAlbumOfId(long userId, long albumId);
	/** -------------------华丽的分割线，下面的还没实现呢-------------------------------- **/

	// /**
	// * 查询相册信息
	// *
	// * @param albumId
	// * 相册Id
	// * @return 相册信息
	// */
	// public Album queryAlbumDetailById(long albumId);

	//	
	// public void addUpCount(int albumId);
	//	
	// public void addDownCount(int albumId);
	//	

	// /**
	// * 查询用户相册数，查询同时符合userId和albumId的相册数
	// *
	// */
	// public int countUserAlbumOfId(long userId, long albumId);

}
